.. _ref_sync_additional_configuration:

.. :validated: 3.0.0

Инструкция по дополнительной настройке модуля синхронизации
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Для предотвращения конфликтов при миграции и синхронизации данных из Microsoft Active Directory (MS AD) используется синхронная модель поведения. В качестве ведущего сервера обработки информации выбран главный сервер в кластере серверов ALD Pro.

Модуль синхронизации работает по следующим принципам:

- **Источник данных LDAP:** используется только MS AD DS (*Microsoft Active Directory Domain Services*). Все изменения объектов выполняются исключительно в MS AD;
- **Направление:** односторонняя синхронизация (MS AD → ALD Pro);
- **Контроль изменений:**
  - объекты, управляемые модулем синхронизации, не редактируются напрямую в ALD Pro;
  - все изменения (создание, модификация, удаление) производятся только в MS AD.

Исходные настройки
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Предполагается, что на момент настройки модуля синхронизации у нас имеются:

-  Настроенный контроллер домена MS AD;
-  Настроенный контроллер домена ALD Pro;
-  В обоих доменах MS AD и ALD Pro настроены корзины с одинаковыми интервалами ротации(очистки);
-  Для сетей, в которых находятся контроллеры домена Microsoft AD и ALD Pro, настроено перенаправление DNS-зон;
-  В домене MS AD поднят центр сертификации и выдан сертификат для доступа по LDAPs (см. :ref:`cert_ms_ad`);
-  Для учетной записи MS AD, под которой идет подключение модуля синхронизации к контроллерам домена MS AD, необходимо через powershell выдать права на контейнер “Deleted Objects” и организационное подразделение (OU), задействованное для процесса синхронизации.

.. note::

   В примере ниже при помощи команд powershell выдаются права на контейнер **Deleted Objects** и организационное подразделение (OU) **Подразделение А** для пользователя **aldagent** в домене **winad.lan**

.. code-block:: powershell

   // для выдачи прав на контейнер запускаем ``powershell`` от имени администратора
   dsacls "CN=Deleted Objects,DC=winad,DC=lan" /takeownership
   dsacls "CN=Deleted Objects,DC=winad,DC=lan" /g winad\aldagent:LCRP
   dsacls "OU=Подразделение А,DC=winad,DC=lan" /g "winad\aldagent:CA;Reset Password;user" /I:S

.. _cert_ms_ad:

Выгрузка сертификатов для контроллера домена MS AD
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Для выгрузки сертификатов необходимо, чтобы в домене был настроен **Центр Сертификации**.

.. note::

    Для корректного отображения окна конфигуратора используйте разрешение экрана не ниже 1280×1024, иначе элементы интерфейса могут выходить за пределы экрана.

Запустить **Центр Сертификации → Шаблоны Сертификатов → Управление** на сервере с ролью **Центр Сертификации**:

.. figure:: images/1.png
   :name: 1

Создать копию шаблона **Проверка подлинности Kerberos**, выбрав пункт **Скопировать шаблон** контекстного меню:

.. figure:: images/2.png
   :name: 2

Настроить шаблон сертификата на вкладке **Общие**:

-  имя сертификата **LDAPowerSSL**;
-  период действия сертификата.

.. figure:: images/3.png
   :name: 3

Отметить галочкой пункт меню **Опубликовать сертификат в MS AD**.

Опубликовать новый тип сертификата. Для этого в в контекстном меню раздела **Шаблоны сертификатов** выбрать **Создать → Выдаваемый шаблон сертификата**.

.. figure:: images/5.png
   :name: 5

В списке доступных шаблонов выбрать созданный ранее:

.. figure:: images/6.png
   :name: 6

На контроллере домена, который будет задействован в процессе синхронизации данных со стороны MS AD, открыть оснастку **Управление сертификатами** компьютера. В дереве сертификатов перейти в папку **Личное** и в контекстном меню выбрать **Все задачи → Запросить новый сертификат**:

.. figure:: images/7.png
   :name: 7

В списке доступных сертификатов выбрать созданный ранее, выпустить сертификат (кнопка **Выпустить сертификат**) и экспортировать (контекстное меню **Все задачи → Экспорт**).

.. figure:: images/8.png
   :name: 8

Откроется мастер экспорта сертификатов:

.. figure:: images/9.png
   :name: 9

.. figure:: images/10.png
   :name: 10

Выбрать кодировку ``base64`` для файла сертификата:

.. figure:: images/11.png
   :name: 11

Задать имя файла:

.. figure:: images/12.png
   :name: 12

После нажатия кнопки **Готово** будет выгружен файл сертификата <имя_сертификата.cer>.

.. figure:: images/13.png
   :name: 13

Необходимо изменить формат файла сертификата на \*.pem, переименовав файл в <имя_сертификата.pem>.
(например sert.pem - как публичный ключ для подключения по LDAPS к контроллеру MS AD)

Выгрузка сертификатов для контроллера домена ALD Pro
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Для выгрузки сертификата необходимо зайти на портал управления ALD Pro, нажать на кнопку просмотра информации о сайте и выбрать **Незащищенное соединение → Подробнее**:

.. figure:: images/14.png
   :name: 14

Выбрать **Просмотреть сертификат**:

.. figure:: images/15.png
   :name: 15

Откроется файл сертификата:

.. figure:: images/16.png
   :name: 16

Открыть ссылку **PEM (сертификат)**:

.. figure:: images/17.png
   :name: 17

Сертификат сайта сохранен.

.. _point4_2:

Настройка синхронизации паролей MS AD → ALD
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Установка passwdhk на контроллер домена (если ранее не устанавливался)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Для настройки потребуется файл PasswdhkSetup.msi, который можно скачать в личном кабинете пользователя Astra Linux https://lk-new.astralinux.ru.

.. important::
   
   Синхронизация пароля пользователя будет успешна только для тех учетных записей **MS AD**, для которых пароль задавался после создания групповой политики ``passwdhk``. Пароли, изменяемые до установки passwdhk, не смогут быть синхронизированы в целевой LDAP (ALD Pro). Для синхронизации паролей у существующих пользователей необходимо сменить/обновить пароль в LDAP-источнике  (MS AD DS).   

Перед началом установки необходимо установить компонент ``Visual C++ Redistributable 2022``.

1. Выполнить запуск установочного файла passwdhk_install/util/VC_redist.x64.exe

Установку необходимо выполнить на каждом контроллере домена, где планируется установка утилиты ``passwdhk``.

2. Запустить файл ``PasswdhkSetup.msi`` от имени администратора.

3. На экране параметров установки указать следующие значения:

 - **Уровень логирования** - указать один из четырех уровней логирования;

 - **Номер ключа регистрации** - ввести значение, полученное на портале управления **ALD Pro**;

 - **Публичный ключ регистрации** - вставить файл открытого ключа, скачанный при развертывании модуля синхронизации в ALD Pro **Модуль синхронизации → Настройки → Синхронизация паролей → Кнопка “Получить ключ”** (подробнее в разделе **Синхронизация паролей ALD Pro → MS AD**).

.. note::

   Если ключ подгрузился автоматически, это означает, что на контроллере домена имеются артефакты. В этом случае необходимо выполнить шаги из раздела Настройка **синхронизации паролей MS AD → ALD** для удаления артефактов старой версии. Это позволит избежать некорректной работы утилиты и ошибок установки или нарушения работы компонентов. 

.. figure:: images/18.png
   :name: 18

1. После заполнения всех параметров нажать на кнопку **Установить**, затем — **Готово**.

2. Дождаться завершения перезагрузки контроллера домена.
   
3. Проверить, что в реестре создались необходимые записи.

.. figure:: images/19.png
   :name: 19

.. figure:: images/20.png
   :name: 20

Обновление passwdhk, установленного через групповую политику (GPO), на версию MSI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. important::

   Утилита может сработать некорректно, если в системе присутствуют артефакты предыдущих установок. В редких случаях это может привести к ошибкам установки или нарушению работы компонентов.

Если на контроллере домена ранее был установлен ``passwdhk`` через групповую политику (GPO), необходимо выполнить удаление старой версии перед установкой новой версии через MSI:

1. Удалить объект групповой политики ``passwdhk`` в редакторе групповых политик (gpmc.msc).

.. figure:: images/21.png
   :name: 21

2. Удалить папку ``passwdhk`` из сетевого каталога ``\\<Имя-контроллера-домена>\SYSVOL\<Имя-домена>\scripts``.

.. figure:: images/22.png
   :name: 22

3. Очистить параметры в реестре:

- Удалить ключ ``Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\passwdhk``.

.. figure:: images/23.png
   :name: 23

- В параметре Notification Packages по пути ``Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa`` удалите значение ``passwdhk``.

.. figure:: images/24.png
   :name: 24

1. Перезагрузить контроллер домена для применения изменений.

2. После перезагрузки вручную удалить из каталога ``C:\Windows\System32`` файлы ``passwdhk.dll`` и ``libcrypto-3-x64.dll``.

.. figure:: images/25.png
   :name: 25

.. figure:: images/26.png
   :name: 26

6. Выполнить установку новой версии ``passwdhk`` через ``PasswdhkSetup.msi``, следуя инструкции из пункта инструкции **Исходные настройки** для модуля синхронизации.

Автоматизированная установка ``passwdhk`` через MST-файл
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Для массовой установки утилиты ``passwdhk`` на контроллеры домена можно использовать файл трансформации (MST), содержащий заранее заданные параметры конфигурации, который можно развернуть с помощью групповой политики (GPO).

.. note::

   Для редактирования установочного файла ``.msi`` и создания ``.mst`` трансформации можно использовать любую утилиту, поддерживающую редактирование таблиц MSI-файлов (например, **Orca** или аналогичные средства). В данной инструкции приведены примеры с использованием Orca.

Создание MST-файла
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

1. Открыть ``PasswdhkSetup.msi`` в утилите редактирования MSI-файлов и создать новый трансформационный файл (MST).

2. В меню File → Open выбрать установочный файл ``PasswdhkSetup.msi``.

3. В меню **Transform** выбрать **New Transform**.

.. figure:: images/27.png
   :name: 27

4. Перейти на вкладку **Property** и добавить следующие свойства:

 - ``REGKEY`` — вставьте публичный ключ регистрации, полученный на портале управления **ALD Pro**. Каждую строку ключа необходимо экранировать символом \n (перевод строки).

 - ``KVNOPUB`` — номер ключа, также полученный на портале.

.. figure:: images/28.png
   :name: 28

.. figure:: images/29.png
   :name: 29

.. figure:: images/30.png
   :name: 30

5. После добавления параметров выбрать **Transform** → **Generate Transform** и сохранить полученный файл под именем, например, ``pass.mst``.

.. figure:: images/31.png
   :name: 31

Подготовка файлов для установки
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

1. Перейти в сетевую папку: ``\\<Имя-контроллера-домена>\SYSVOL\<Имя-домена>\scripts``

2. Скопировать в нее следующие файлы:

 - ``PasswdhkSetup.msi``;

 - ``pass.mst``.

.. figure:: images/32.png
   :name: 32

Настройка групповой политики
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

1. Открыть редактор групповой политики (gpmc.msc).

2. В узле **Domain Controllers** создать новую групповую политику или использовать существующую.

3. Перейти в раздел: **Конфигурация пользователя** → **Политики** → **Конфигурация программ** → **Установка программ**.

4. Создать новый пакет:

 - Указать путь к ``PasswdhkSetup.msi`` из сетевой папки;

 - в способе развертывания выбрать Особый.

.. figure:: images/33.png
   :name: 33

5. Добавить MST-файл ``pass.mst`` по тому же сетевому пути.

.. figure:: images/34.png
   :name: 34

Применение политики
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

1. Применить политику командой: ``gpupdate /force``

2. Перезагрузить контроллер домена.

.. _point4_1:

Синхронизация паролей ALD Pro → MS AD
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Получение открытого ключа
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

В интерфейсе ALD Pro открыть **Модуль синхронизации → Конфигурации → Синхронизация паролей**

.. figure:: images/35.png
   :name: 35

По нажатию кнопки **Получить ключ** скачивается файл открытого ключа и актуализируется порядковый номер ключа.

Синхронизация паролей
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Скачанный файл открытого ключа необходимо сохранить в любую директорию, например, ``/tmp/``. Следующим шагом файл открытого ключа необходимо скопировать в расположение ``/opt/rbta/aldpro/syncer/``:

.. code-block:: bash

   sudo cp /tmp/public.gpg  /opt/rbta/aldpro/syncer/public.gpg

Перезагружаем контроллер домена:

.. code-block:: bash

   sudo aldproctl restart

.. note:: 

   - При изменении пароля синхронизированного пользователя через интерфейс FreeIpa, синхронизация пароля от ALD Pro к MS AD не произойдет. Для изменения пароля с последующей успешной синхронизацией необходимо использовать интерфейс ПК «ALD Pro»;

   - Процесс изменения пароля пользователя через личный кабинет с последующей синхронизацией от ALD Pro к MS AD проходит успешно только при использовании личного кабинета контроллера домена, на котором был развернут модуль синхронизации;

   - При сбросе пароля пользователя через интерфейс ПК «ALD Pro» временный пароль не синхронизируется. После сброса пароля пользователя необходимо залогиниться в домене, изменить пароль с временного на постоянный. При данных условиях произойдет синхронизация пароля от ALD Pro к MS AD.

Пароли пользователей MS AD, установленные до настройки модуля синхронизации, синхронизированы не будут.

Синхронизация паролей пользователей после настройки модуля синхронизации и сопоставлений подразделений происходит по логике:

- синхронизирован пользователь в домен ALD Pro → изменен пароль пользователя в домене MS AD → синхронизирован пароль пользователя в домен ALD Pro;

- создан пользователь в домене MS AD → синхронизирован пользователь в домен ALD Pro.

.. attention::
   
   При настройке синхронизации паролей между ALD Pro и MS AD рекомендуется вручную задать согласованные значения параметров политики паролей в обеих системах, так как их автоматическая синхронизация не предусмотрена.

Включение TLS на Windows Server 2008R2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. important::
   
   Настройка выполняется, если на контроллере домена отключено TLS. Данная инструкция применима к контроллерам домена с ОС WS 2008R2. Если версия ОС отличается, необходимо обратиться к официальной документации Microsoft для выбора подходящей инструкции.

Алгоритм включения TLS
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

1. Для включения TLS необходимо обновить реестр на сервере контроллера домена.

   - Необходимо открыть реестр: выполнить “regedit” в окне запуска.

.. figure:: images/36.png
   :name: 36

.. figure:: images/37.png
   :name: 37

.. figure:: images/38.png
   :name: 38

Откроется окно редактора реестра:

.. figure:: images/39.png
   :name: 39


- Необходимо перейти к расположению и добавить разделы TLS 1.1 и TLS.
- В разделе Protocol:

``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocol``

.. figure:: images/40.png
   :name: 40

.. figure:: images/41.png
   :name: 41

Создаются еще два раздела Client и Server под обоими ключами TLS.

.. figure:: images/42.png
   :name: 42

- Теперь необходимо создать значения DWORD в разделе Server и Client со следующими значениями:

::

   DisabledByDefault [Значение = 0]
   Enabled [Значение = 1]

.. figure:: images/43.png
   :name: 43

.. figure:: images/44.png
   :name: 44

2. Необходимо отключить старые версии TLS и SSL. Для этого:

   1. Открыть реестр на сервере контроллера домена: выполнить “regedit” в окне запуска (аналогично шагу 1).

   2. Перейти к расположению:

``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols``

   3. Изменить значения DWORD в разделе Server и Client в разделе ключи TLS 1.0, SSL 3.0 и более старых версий SSL.

::

    DisabledByDefault [Значение = 0]
    Enabled [Значение = 0]

3. После выполнения всех вышеперечисленных настроек необходимо перезагрузить сервер контроллера домена. Данная настройка выполняется на всех контроллерах домена.

Особенности настройки при миграции большого количества объектов
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

По умолчанию 389ds выполняет обновления ссылочной целостности сразу после операции удаления или переименования. В зависимости от количества операций это может повлиять на производительность. Чтобы уменьшить влияние на производительность, есть возможность увеличить время между обновлениями, для этого необходимо задать интервал обновления в секундах. По умолчанию интервал обновления равен 0.

Чтобы показать имя 389ds-сервера:

.. code-block:: bash

   sudo dsctl -l

Скопируйте в буфер имя вашего сервера (рядом с ним вы увидите ``slapd-GLOBAL-CATALOG``). Чтобы отобразить текущий интервал обновления, запустите (заменив <имя LDAP-сервера> на имя нужного вам LDAP-сервера):

.. code-block:: bash

   sudo dsconf <имя LDAP-сервера> plugin referential-integrity show | grep referint-update-delay

Задать новое значение интервала обновления:

.. code-block:: bash

   sudo dsconf <имя LDAP-сервера> plugin referential-integrity set --update-delay <новое_значение>

Перезапустите инстанс:

.. code-block:: bash

   sudo dsctl <имя LDAP-сервера> restart


Логирование событий и отладка (работы модуля синхронизации) с MS AD
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Логирование событий и отладка
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Данный раздел посвящён диагностике и устранению ошибок, возникающих при синхронизации между ALD Pro и Microsoft Active Directory (MS AD). Приведены типовые сценарии возникновения проблем, способы их диагностики, а также рекомендации по их устранению.

События, возникающие в процессе синхронизации, фиксируются в соответствующих журналах событий. Выполнение диагностики **целесообразно начинать с анализа этих журналов**.

Общие категории ошибок:

- Ошибки при установке и первоначальной настройке;
- Ошибки, возникающие при отсутствии связности между ALD Pro и MS AD;
- Ошибки при сопоставлении структур (например, дочерних подразделений) между ALD Pro и MS AD.

Ошибки могут проявляться при взаимодействии компонентов, выполняющих синхронизацию данных:

- компонент ``passwdhk``;
- служба ``syncer-watcher``;
- служба ``syncer-loadrunner``;
- cлужба ``pwdSync``.

Под данными службами подразумевается следующее:
- Служба syncer-watcher выполняет синхронизацию данных из LDAP контроллера MS AD в базу PostgreSQL на контроллера ALD Pro;
- Служба syncer-loadrunner выполняет синхронизацию из базы PostgreSQL в LDAP на контроллере ALD Pro;
- Служба pwdSync выполняет синхронизацию паролей пользователей в MS AD и ALD Pro.


Недопустимость вложенных точек синхронизации
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

При создании точек синхронизации  необходимо исключить ЛЮБУЮ вложенность или пересечение областей синхронизации.

Точкой синхронизации называется пара областей источник → назначение, задающая границы данных, подлежащих синхронизации между контроллерами домена (КД) или между КД и внешними LDAP-сервисами.

Пути (DN) областей синхронизации не должны пересекаться:
- одна точка синхронизации не может включать область, которая полностью или частично входит в другую точку синхронизации;
- пути источников и назначения разных точек не должны совпадать или быть вложенными друг в друга.

**Пример:**

::

   # Одинаковые пути назначения
   M1 → LDAP ou=A1
   M2 → LDAP ou=A1     ← конфликт

   # Вложенные пути
   M1 → LDAP ou=A1
   M2 → LDAP ou=A1,ou=A2   ← конфликт (A2 является частью A1)

   # Вложенные области на стороне источника
   M1 → ou=A1
       ├── M2 → ou=A2
       └── M3 → ou=A3

Поскольку идентификация происходит по уникальным атрибутам(идентификаторам), то один объект не может находиться в 2х разных структурах одновременно. Точки синхронизации обрабатываются последовательно и возможны ситуации постоянного перемещения объекта в оргструктуре целевого  LDAP(ALD Pro). Это приводит к **потере целостности данных и некорректной работе модуля синхронизации**.

Чтобы избежать вложенности, необходимо соблюдать следующие условия:

- Проектировать области синхронизации так, чтобы каждая из них охватывала уникальную ветвь LDAP-дерева;

- Новая точка синхронизации не должна пересекаться с существующими: её путь (DN) не должен включать или быть включён в пути других точек;

- При необходимости синхронизировать несколько областей внутри одной ветви правильным будет использовать независимые точки верхнего уровня или задавать фильтры объектов внутри одной точки.